package com.lovi.generics;




import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * 定义个泛型类 DAO<t>,在其中定义一个Map成员变量, Map的键为String类型,值为T 类型
 * 分别创建以下方法：
 * (1) public void save(String id,T entity):保存T 类型的对象到Map 成员变量中
 *（2） public T get（String id）：从 map 中获取 id 对应的对象
 * (3) public void update(String id,T entity)：替换 map 中key为id的内容，改为 entity 对象
 * (4) public List<T> list()：返回 map中存放的所有T 对象
 * (5) public void delete(String id)：删除指定 id 对象
 * 定义一个 User 类：
 * 该类包含: private成员变量(int类型) id, age; (String类型) name。
 * 创建 DAO 类的对象， 分别调用其 save、get、update、list,delete 方法来操作 User 对象
 * 使用Junit 单元测试类进行测试。
 */
public class Test04 {
    /*
     * 创建 DAO 类的对象， 分别调用其 save、get、update、list,delete 方法来操作 User 对象
     * 使用Junit 单元测试类进行测试。
     */
    public static void main(String[] args) {
        DAO<User> userDao = new DAO<User>();
        userDao.save("1", new User(1, 20, "tom"));
        userDao.save("2", new User(2, 20, "jack"));
        userDao.save("3", new User(3, 20, "happy"));
        System.out.println(userDao.list());
        userDao.update("1", new User(1, 20, "jc"));
        userDao.delete("2");
        System.out.println(userDao.list());

    }
}
/*
 * 定义一个 User 类：
 * 该类包含: private成员变量(int类型) id, age; (String类型) name。
 */
class User{
    private int id;
    private int age;
    private String name;

    public User(int id, int age, String name) {
        this.id = id;
        this.age = age;
        this.name = name;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @Override
    public String toString() {
        return "\nUser{" +
                "id=" + id +
                ", age=" + age +
                ", name='" + name + '\'' +
                '}';
    }
}

class DAO<T>{
    Map<String,T> map = new HashMap<>();
    public void save(String id,T entity){
        map.put(id,entity);
    }
    // 从 map 中获取 id 对应的对象
    public T get(String id){
        if(id!=null && id != ""){
            return map.get(id);
        }
        return null;
    }
    // 替换 map 中key为id的内容，改为 entity 对象
    public void update(String id,T entity){
        map.put(id,entity);
    }

     //(4) public List<T> list()：返回 map中存放的所有T 对象
     public List<T> list() {
         List<T> list = new ArrayList<>();
         map.values().forEach(list::add);
         return list;
     }

    // (5) public void delete(String id)：删除指定 id 对象
    public void delete(String id){
        map.remove(id);
    }

}
